"""
布尔类型介绍
"""

# 1. 布尔类型值必须以大写字母开头
print(type(True))
print(type(False))

# 2. 布尔类型可以做 四则运算操作
true = True + True
print(type(true))
print(true)
true_true = True + True + True + True
print(type(true_true))
print(true_true)
false = True + False
print(type(false))
print(false)
b = True - True
print(type(b))
print(b)
true_false = True - False
print(type(true_false))
print(true_false)
true1 = True * True
print(type(true1))
print(true1)

# 3. 布尔值可以直接和整型操作
true_ = True * 33
print(type(true_))
print(true_)
true_1 = True + 2
print(type(true_1))
print(true_1)

# 4. bool 声明。默认是false
bool1 = bool()
print(type(bool1))
print(bool1)
# 带有值的声明
print(bool(True))
print(bool(False))
# 非零(True)
print(bool(1))
print(bool(10))
print(bool(-10))
# 零(False)
print(bool(0))
# 空字符串(False)
print(bool(''))
# 空格(True)
print(bool(' '))
# 空列表(False)
print(bool([]))
# 空字典(False)
print(bool({}))
# None(False)
print(bool(None))

# 5. 比较运算符得到布尔值
print(4 > 3)
print('hello world' == 'helloworld')
s = {1, 2, 3}
# 集合浅拷贝
copy = s.copy()
# 内容相同
print(s == copy)
# 地址不同
print(s is copy)

# 6. 逻辑运算之 and 。存在 A and B，如果 bool(A) == False，那么直接返回 A；如果 bool(A) == True，则返回B。这和其他编程语言有所不同
# 返回 False
and_ = False and 4
print(and_)
i = 0 and 3
# 返回 0
print(i)
# 返回 False
and_1 = 4 > 3 and 2 > 3
print(and_1)
# 返回 True
and_2 = 4 > 3 and 6 > 5
print(and_2)
# 返回 6
and_3 = 4 > 3 and 6
print(and_3)

# 7. 逻辑运算之 or 。存在 A or B，如果 bool(A) == True，那么直接返回 A；如果 bool(A) == False，则返回 B。这和其他编程语言有所不同
# 返回 True
print(5 > 3 or 4)
# 返回 5
print(5 or 5 > 3)
# 返回 False
print(3 > 5 or 3 > 4)
# 返回 [1, 2, 3, 4]
print(3 > 5 or [1, 2, 3, 4])

# 8. 逻辑运算之 not。True 变成 False，False 变成 True
print(not True)
print(not False)
print(not 1)
print(not 0)
print(not -1)
print(not {})
print(not [])
